package br.com.damazzy.negocio.servico;

import java.util.ArrayList;
import java.util.List;

import br.com.damazzy.dto.RetornoDTO;
import br.com.damazzy.negocio.entidade.TipoProduto;
import br.com.damazzy.negocio.persistencia.dao.DamazzyDaoFactory;
import br.com.damazzy.negocio.persistencia.dao.TipoProdutoDao;
import br.com.damazzy.negocio.servico.conversor.DamazzyConversor;
import br.com.damazzy.vo.TipoProdutoVO;

public class ServicoTipoProduto implements ServicoCrudDamazzy<TipoProdutoVO, RetornoDTO>, 
		DamazzyConversor<TipoProduto, TipoProdutoVO> {
	
	private static final String LISTA = "lista";
	private static final String VO = "vo";
	
	private TipoProdutoDao dao = DamazzyDaoFactory.getInstance().criarTipoProdutoDao();

	public RetornoDTO alterar(TipoProdutoVO vo) throws Exception {
		
		RetornoDTO dto = new RetornoDTO();
		
		TipoProduto tipoProduto = converterVOEntidade(vo);
		tipoProduto = dao.alterar(tipoProduto);
		
		TipoProdutoVO voAlterada = converterEntidadeVO(tipoProduto);
		
		dto.dados.put(VO, voAlterada);
		
		return dto;
	}

	public RetornoDTO excluir(TipoProdutoVO vo) throws Exception {
		
		TipoProduto tipoProduto = converterVOEntidade(vo);
		dao.excluir(tipoProduto.getIdTipoProduto());
		
		return new RetornoDTO();
	}

	public RetornoDTO incluir(TipoProdutoVO vo) throws Exception {
			
		TipoProduto tipoProduto = converterVOEntidade(vo);
		dao.incluir(tipoProduto);
		
		return new RetornoDTO();
	}

	public RetornoDTO obter(TipoProdutoVO vo) throws Exception {
		
		RetornoDTO dto = new RetornoDTO();
			
		TipoProduto tipoProduto = converterVOEntidade(vo);
		tipoProduto = dao.obter(tipoProduto.getIdTipoProduto());
		
		TipoProdutoVO produtoVO = converterEntidadeVO(tipoProduto);
		
		dto.dados.put(VO, produtoVO);
		
		return dto;
	}

	public RetornoDTO pesquisar(TipoProdutoVO vo) throws Exception {
		
		RetornoDTO dto = new RetornoDTO();
			
		TipoProduto produtoFiltro = converterVOEntidade(vo);
		List<TipoProduto> tiposProduto = dao.pesquisar(produtoFiltro);
		List<TipoProdutoVO> vos = converterEntidadeVO(tiposProduto);
		
		dto.dados.put(LISTA, vos);
		
		return dto;
	}
	
	public TipoProduto converterVOEntidade(TipoProdutoVO vo) throws Exception {
		
		TipoProduto tipoProduto = new TipoProduto();
		
		tipoProduto.setIdTipoProduto(vo.getIdTipoProduto() != null ? new Integer(vo.getIdTipoProduto()) : null);
		tipoProduto.setDescricao(vo.getDescricao() != null ? vo.getDescricao() : null);
		
		return tipoProduto;
	}
	
	public TipoProdutoVO converterEntidadeVO(TipoProduto tipoProduto) throws Exception {
		
		TipoProdutoVO vo = new TipoProdutoVO();
		
		vo.setIdTipoProduto(tipoProduto.getIdTipoProduto().toString());
		vo.setDescricao(tipoProduto.getDescricao());
		
		return vo;
	}
	
	private List<TipoProdutoVO> converterEntidadeVO(List<TipoProduto> tiposProduto) throws Exception {
		
		List<TipoProdutoVO> vos = new ArrayList<TipoProdutoVO>();
		
		for (TipoProduto tp : tiposProduto) {
			vos.add(converterEntidadeVO(tp));
		}
		
		return vos;
	}
}
